﻿
CREATE PROCEDURE [dbo].[ManufacturesUpdate]
(
	@CountryId int,
	@Name varchar(100),
	@ShortName varchar(50),
	@LatName varchar(50),
	@Note varchar(250),
	@MD datetime,
	@MW varchar(50),
	@ToDelete bit,
	@Original_MD datetime,
	@Original_Id int
)
AS
DECLARE @strMsg nvarchar(500), @intRet int, @intErrCode int
DECLARE @orgName nvarchar(100), @orgShortName nvarchar(20), @orgToDelete bit, @orgParentToDelete bit
SET NOCOUNT ON

IF (@Name Is Null) OR (@ShortName Is Null) OR (@ToDelete Is Null)
OR (@Original_Id Is Null) OR (@Original_MD Is Null) OR (@CountryId Is Null)
BEGIN
	SELECT @intErrCode = 1, @strMsg = 'Неправильные параметры в вызове процедуры ' + Object_Name(@@Procid) + ' !'
	RAISERROR (@strMsg, 11, @intErrCode)
	RETURN @intErrCode
END

IF (ltrim(@Name) = '') OR (ltrim(@ShortName) = '')
BEGIN
	SELECT @intErrCode = 2, @strMsg = 'Незаполнено наименование или короткое наименование!'
	RAISERROR (@strMsg, 11, @intErrCode)
	RETURN @intErrCode
END

SELECT @orgName = Name, @orgShortName = ShortName, @orgToDelete = ToDelete
FROM [CO].[Manufacturers] WHERE Id = @Original_Id AND MD = @Original_MD
IF (@@rowcount <> 1)
BEGIN
	SELECT @intErrCode = 3, 
	@strMsg = 'Данные изменены после последнего запроса!'
	RAISERROR (@strMsg, 11, 1)
	RETURN @intErrCode
END

SELECT @orgParentToDelete = ToDelete
FROM CO.Countries WHERE Id = @CountryId
IF (@@rowcount <> 1)
BEGIN
	SELECT @intErrCode = 4, 
	@strMsg = 'Отсутствует родительская запись с кодом ' + cast(@CountryId as varchar(20)) + ' в справочнике стран!'
	RAISERROR (@strMsg, 11, 1)
	RETURN @intErrCode
END

IF @orgParentToDelete = 1 
BEGIN
	SELECT @intErrCode = 5, 
	@strMsg = 'Родительская запись с кодом ' + cast(@CountryId as varchar(20)) + ' в справочнике стран отмечена для удаления!'
	RAISERROR (@strMsg, 11, 1)
	RETURN @intErrCode
END

IF @orgToDelete = 1 --Запись была отмечена для удаления
BEGIN
	IF @ToDelete = 1 
	BEGIN
		SELECT @intErrCode = 6, 
		@strMsg = 'Нельзя редактировать запись, отмеченную для удаления!'
		RAISERROR (@strMsg, 11, 1)
		RETURN @intErrCode
	END
END ELSE BEGIN
	IF @ToDelete = 1 
	BEGIN
		SELECT @intErrCode = 7, 
		@strMsg = 'Для удаления данных должна использоваться другая процедура!'
		RAISERROR (@strMsg, 11, 1)
		RETURN @intErrCode
	END
END

IF @orgName <> @Name
BEGIN
	IF EXISTS (SELECT TOP 1 ID FROM [CO].[Manufacturers] WHERE Name = @Name AND ToDelete = 0 ) 
	BEGIN
		SELECT @intErrCode = 8, @strMsg = 'Дублируется наименование!'
		RAISERROR (@strMsg, 11, @intErrCode)
		RETURN @intErrCode
	END
END

IF @orgShortName <> @ShortName
BEGIN
	IF EXISTS (SELECT TOP 1 ID FROM [CO].[Manufacturers] WHERE ShortName = @ShortName AND ToDelete = 0) 
	BEGIN
		SELECT @intErrCode = 9, @strMsg = 'Дублируется короткое наименование!'
		RAISERROR (@strMsg, 11, @intErrCode)
		RETURN @intErrCode
	END
END

EXEC [dbo].[ProcessStatistic] @Note OUTPUT, @MD OUTPUT, @MW OUTPUT
	SET NOCOUNT OFF;
UPDATE [CO].[Manufacturers] SET [CountryId] = @CountryId, [Name] = @Name, [ShortName] = @ShortName, [LatName] = @LatName, 
[Note] = @Note, [MD] = @MD, [MW] = @MW, ToDelete = @ToDelete 
WHERE Id = @Original_Id AND MD = @Original_MD;

SELECT Id, CountryId, Name, ShortName, LatName, Note, MD, MW, ToDelete FROM CO.Manufacturers 
WHERE (Id = @Original_Id)
RETURN 0
